<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON</title>
    <script>

        var obj = {name:"孙悟空", age:18, gender:"男"};

        /*
            我们希望可以将一个对象在不同的语言中进行传递，
                已达到通信的目的，最佳方式就是将一个对象转换为字符串的形式

            JSON（JavaScript Object Notation）
                - JS的对象表示法
                - JSON实际上就是一个字符串，它的语法格式和JS对象的语法基本上是一致
                    通过JSON表示的对象可以在任意的语言中使用
                - JSON的语法和JS对象的语法基本一样，不同点在于，
                    JSON中属性名必须加引号，而且必须是双引号
                    JSON中的字符串也必须使用双引号
                    最后一个属性后边不能再有逗号
                - JSON的类型：
                    JSON对象 {}
                    JSON数组 []
                - JSON所支持的属性的类型：
                    数字
                    字符串（使用双引号）
                    布尔值
                    空值（null）
                    对象
                    数组
         */

        var json = '{"name":"孙悟空", "age":18, "gender":"男", "haha":null, "abc":{}, "bcd":[]}';
        var jsonArr = '[1, 2, 3]';

        // console.log(typeof json);
        // console.log(typeof jsonArr);

        /*
            JSON 工具类，用来操作JSON数据的
                JSON.parse() 用来将一个JSON转换为JS对象（数组）
                JSON.stringify() 用来将一个JS对象转换为一个JSON字符串
         */
        // 将一个JSON字符串转换为JS对象
        // var o = JSON.parse(json);
        // var arr = JSON.parse(jsonArr);

        // json = '{"name":"孙悟空", "age":18, "gender":"男"}';
        // JSON.parse(json);

        var arr = [
            {name:"孙悟空", age:18, gender:"男"},
            {name:'猪八戒', age:28, gender:'男'},
            {name:'沙和尚', age:38, gender:'男'}
        ];

        var arrStr = JSON.stringify(arr);

        // console.log(arrStr);

        var arr2 = [{name:'孙悟空'},{name:'猪八戒'}];
        // var arr3 = arr2.slice(); 浅复制
        // arr3[0].name = '哈哈';
        // console.log(arr2[0].name);

        // 可以通过JSON来完成对象的深复制
        var arr3 = JSON.parse(JSON.stringify(arr2));

        arr3[0].name = '哈哈';
        console.log(arr2[0].name);


    </script>
</head>
<body>

</body>
</html>